//引入mySql
const { query } = require('../models/mySql')
//路由
const router = require('koa-router')()
// 全局异常
const initdata = require('../utils/init')
//引入token生成函数
const { jwtSign } = require('../utils/token')
//打印
const { log } = console

// 增 INSERT into 表名 (字段名列表(逗号隔开)) values(值列表(逗号隔开));
router.post('/increase', async (ctx, next) => {
  let { username, password } = ctx.request.body
  // 校验
  if (username === '' | password === '') {
    new initdata(ctx).tips('用户名和密码不能为空', 202)
    return false
  }
  if (username === undefined | password === undefined) {
    new initdata(ctx).tips('参数填写不正确', 400)
    return false
  }
  // 用户名校验
  let phone = /^1[3456789]\d{9}$/
  if (!phone.test(username)) {
    new initdata(ctx).tips('手机号码不正确', 202)
    return false
  }
  // 密码校验
  let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$/
  if (!reg.test(password)) {
    new initdata(ctx).tips('密码必须由6~20位数字和字母的组合', 202)
    return false
  }
  // 新增sql
  let sql = 'INSERT into `user` (id,username,password) value(null,?,?);';
  let params = [username, password]
  let listdata = await query(sql, params)
  // 返回
  if (listdata.length === 0) {
    new initdata(ctx).tips('账号或密码错误', 202)
  } else {
    ctx.body = {
      code: 200,
      message: 'success'
    }
  }
})

// 删 DELETE FROM 表名 WHERE 删除条件;
router.post('/delete', async (ctx, next) => {
  let { username, password } = ctx.request.body
  // 校验
  if (username === '' | password === '') {
    new initdata(ctx).tips('用户名和密码不能为空', 202)
    return false
  }
  // 删除sql
  let sql = 'DELETE FROM user WHERE username=?';
  let params = [username]
  let listdata = await query(sql, params)
  // 返回
  if (listdata.length === 0) {
    new initdata(ctx).tips('删除失败', 202)
  } else {
    ctx.body = {
      code: 200,
      message: 'success'
    }
  }
})

// 改 UPDATE 表名 SET 字段1=表达式1,字段2=表达式2 WHERE 修改条件;
router.post('/change', async (ctx, next) => {
  let { username, password, id } = ctx.request.body
  // 校验
  if (username === '' | password === '') {
    new initdata(ctx).tips('用户名和密码不能为空', 202)
    return false
  }
  // 删除sql
  let sql = 'UPDATE user SET username = ?,password = ? WHERE id = ?';
  let params = [username, password, id]
  let listdata = await query(sql, params)
  // 返回
  if (listdata.length === 0) {
    new initdata(ctx).tips('更新用户失败', 400)
  } else {
    ctx.body = {
      code: 200,
      message: 'success'
    }
  }
})

// 查 `SELECT * FROM 表名 WHERE 字段 = '${参数}'`
router.post('/login', async (ctx, next) => {
  let { username, password } = ctx.request.body
  // 校验
  if (username === '' | password === '') {
    new initdata(ctx).tips('用户名和密码不能为空', 202)
    return false
  }
  if (username === undefined | password === undefined) {
    new initdata(ctx).tips('参数填写不正确', 400)
    return false
  }
  if (username !== 'admin' || password !== 'admin') {
    // 用户名校验
    let phone = /^1[3456789]\d{9}$/
    if (!phone.test(username)) {
      new initdata(ctx).tips('手机号码不正确', 202)
      return false
    }
    // 密码校验
    let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$/
    if (!reg.test(password)) {
      new initdata(ctx).tips('密码必须由6~20位数字和字母的组合', 202)
      return false
    }
  }
  // 查询集合
  let sql = `SELECT * FROM user WHERE username = '${username}'`
  let listdata = await query(sql)
  // 用引入的jwtSign方法生成token并返回
  const token = jwtSign({})
  // 返回
  if (listdata.length === 0) {
    new initdata(ctx).tips('账号或密码错误', 202)
  } else {
    ctx.body = {
      code: 200,
      data: {
        pageItems: token,
        total: 1
      },
      message: 'success'
    }
  }
})

// 无规则新增
router.post('/register', async (ctx, next) => {
  let { username, password } = ctx.request.body
  // 存储到数据库
  let sql = 'INSERT into `user` (id,username,password) value(null,?,?);';
  let params = [username, password]
  let listdata = await query(sql, params)
  // 返回
  if (listdata.length === 0) {
    new initdata(ctx).tips('账号或密码错误', 202)
  } else {
    ctx.body = {
      code: 200,
      message: '新增成功'
    }
  }
})

module.exports = router